// pages/application/application.js
const dbHelper = require('../../utils/dbHelper');

Page({

    /**
     * 页面的初始数据
     */
    data: {
        userInfo: null,
        studentName: '', // 学生姓名
        genderOptions: ['男', '女'], // 性别选项
        genderIndex: null, // 性别索引
        age: '', // 年龄
        problemTypes: ['学习压力', '人际关系', '情绪困扰', '心理疾病', '职业规划', '其他'],
        problemTypeIndex: null,
        expectedDate: '',
        minDate: '',
        timeSlots: ['上午 8:00-10:00', '上午 10:00-12:00', '下午 14:00-16:00', '下午 16:00-18:00'],
        timeSlotIndex: null,
        descriptionLength: 0,
        isUrgent: false,
        submitting: false
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        // 设置最小日期为明天，防止用户选择今天之前的日期
        const tomorrow = new Date();
        tomorrow.setDate(tomorrow.getDate() + 1);
        const year = tomorrow.getFullYear();
        const month = ('0' + (tomorrow.getMonth() + 1)).slice(-2);
        const day = ('0' + tomorrow.getDate()).slice(-2);
        
        this.setData({
            minDate: `${year}-${month}-${day}`
        });

        // 获取用户信息，检查用户是否已登录
        const userInfo = wx.getStorageSync('userInfo');
        if (!userInfo) {
            wx.showToast({
                title: '请先登录',
                icon: 'none',
                duration: 2000,
                success: () => {
                    setTimeout(() => {
                        wx.navigateTo({
                            url: '/pages/login/login',
                        });
                    }, 2000);
                }
            });
            return;
        }
        
        // 如果用户已经登录，使用用户信息预填表单
        this.setData({
            userInfo: userInfo,
            studentName: userInfo.username || '' // 使用用户名作为默认姓名
        });
        
        // 如果用户性别信息存在，预填性别选择器
        if (userInfo.gender) {
            // 微信的性别编码：1为男性，2为女性
            const genderIndex = userInfo.gender === 1 ? 0 : (userInfo.gender === 2 ? 1 : null);
            this.setData({ genderIndex });
        }
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {
        // 页面首次渲染完成时的处理，暂无具体实现
    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
        // 页面显示时的处理，暂无具体实现
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {
        // 页面隐藏时的处理，暂无具体实现
    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {
        // 页面卸载时的处理，暂无具体实现
    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {
        // 用户下拉刷新时的处理，暂无具体实现
    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {
        // 页面上拉触底时的处理，暂无具体实现
    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {
        // 用户点击分享时的处理，暂无具体实现
    },

    // 表单输入事件处理函数：学生姓名输入
    onStudentNameInput(e) {
        this.setData({
            studentName: e.detail.value
        });
    },
    
    // 表单选择事件处理函数：性别选择
    onGenderChange(e) {
        this.setData({
            genderIndex: e.detail.value
        });
    },
    
    // 表单输入事件处理函数：年龄输入
    onAgeInput(e) {
        this.setData({
            age: e.detail.value
        });
    },

    // 表单选择事件处理函数：问题类型选择
    onProblemTypeChange(e) {
        this.setData({
            problemTypeIndex: e.detail.value
        });
    },

    // 表单选择事件处理函数：日期选择
    onDateChange(e) {
        this.setData({
            expectedDate: e.detail.value
        });
    },

    // 表单选择事件处理函数：时段选择
    onTimeSlotChange(e) {
        this.setData({
            timeSlotIndex: e.detail.value
        });
    },

    // 表单输入事件处理函数：问题描述输入，更新字数统计
    onDescriptionInput(e) {
        this.setData({
            descriptionLength: e.detail.value.length
        });
    },

    // 表单开关事件处理函数：紧急情况状态变化
    onUrgentChange(e) {
        this.setData({
            isUrgent: e.detail.value
        });
    },

    // 重置表单数据为初始状态
    resetForm() {
        this.setData({
            studentName: '',
            genderIndex: null,
            age: '',
            problemTypeIndex: null,
            expectedDate: '',
            timeSlotIndex: null,
            descriptionLength: 0,
            isUrgent: false
        });
    },

    // 提交咨询申请表单
    async submitApplication(e) {
        console.log('===== 提交咨询申请表单 =====');
        
        // 表单验证 - 基本信息部分
        if (!this.data.studentName || this.data.studentName.trim() === '') {
            wx.showToast({
                title: '请输入您的姓名',
                icon: 'none'
            });
            return;
        }
        
        if (this.data.genderIndex === null) {
            wx.showToast({
                title: '请选择您的性别',
                icon: 'none'
            });
            return;
        }
        
        if (!this.data.age) {
            wx.showToast({
                title: '请输入您的年龄',
                icon: 'none'
            });
            return;
        }
        
        // 验证年龄的有效性
        const age = parseInt(this.data.age);
        if (isNaN(age) || age <= 0 || age >= 100) {
            wx.showToast({
                title: '请输入有效的年龄',
                icon: 'none'
            });
            return;
        }
        
        // 表单验证 - 咨询信息部分
        if (this.data.problemTypeIndex === null) {
            console.error('提交失败: 未选择问题类型');
            wx.showToast({
                title: '请选择问题类型',
                icon: 'none'
            });
            return;
        }
        
        if (!this.data.expectedDate) {
            console.error('提交失败: 未选择期望日期');
            wx.showToast({
                title: '请选择期望咨询日期',
                icon: 'none'
            });
            return;
        }
        
        if (this.data.timeSlotIndex === null) {
            console.error('提交失败: 未选择期望时间段');
            wx.showToast({
                title: '请选择期望咨询时间段',
                icon: 'none'
            });
            return;
        }
        
        // 验证问题描述是否已填写
        if (!e.detail.value.description || e.detail.value.description.trim() === '') {
            console.error('提交失败: 未填写问题描述');
            wx.showToast({
                title: '请填写问题描述',
                icon: 'none'
            });
            return;
        }

        // 再次检查用户是否已登录
        const userInfo = wx.getStorageSync('userInfo');
        console.log('当前用户信息:', userInfo);
        
        if (!userInfo) {
            console.error('提交失败: 用户未登录');
            wx.showToast({
                title: '请先登录',
                icon: 'none',
                duration: 2000,
                success: () => {
                    setTimeout(() => {
                        wx.navigateTo({
                            url: '/pages/login/login',
                        });
                    }, 2000);
                }
            });
            return;
        }
        
        // 显示提交中的加载提示
        wx.showLoading({
            title: '提交中...',
            mask: true
        });
        
        const db = wx.cloud.database();
        
        // 组装提交数据，准备保存到数据库
        const requestData = {
            studentId: userInfo.openid || userInfo._openid,
            studentName: this.data.studentName, // 使用表单中填写的姓名
            gender: this.data.genderOptions[this.data.genderIndex], // 性别
            age: parseInt(this.data.age), // 年龄
            problemType: this.data.problemTypes[this.data.problemTypeIndex],
            description: e.detail.value.description,
            expectedDate: this.data.expectedDate,
            expectedTimeSlot: this.data.timeSlots[this.data.timeSlotIndex],
            isUrgent: this.data.isUrgent,
            status: 'pending'  // 初始状态为待审批
        };
        
        console.log('准备提交的申请数据:', requestData);
        
        // 将咨询申请数据保存到云数据库
        db.collection('consultation_requests').add({
            data: {
                ...requestData,
                createTime: db.serverDate(),
                updateTime: db.serverDate()
            }
        }).then(res => {
            console.log('申请提交成功, 返回结果:', res);
            wx.hideLoading();
            
            // 提交成功后显示提示并返回上一页
            wx.showToast({
                title: '申请已提交',
                icon: 'success',
                duration: 2000,
                success: () => {
                    setTimeout(() => {
                        // 返回上一页
                        wx.navigateBack();
                    }, 2000);
                }
            });
        }).catch(err => {
            // 处理提交失败的情况
            console.error('申请提交失败:', err);
            wx.hideLoading();
            
            wx.showToast({
                title: '提交失败，请重试',
                icon: 'none'
            });
        });
    },

    // 返回上一页的导航方法
    goBack: function() {
        wx.navigateBack({
            delta: 1
        });
    }
})